package com.kuangstudy.controller.string.lua;

import com.kuangstudy.vo.R;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

/**
 * @author 飞哥
 * @Title: 学相伴出品
 * @Description: 我们有一个学习网站：https://www.kuangstudy.com
 * @date 2021/5/21 10:03
 */
@RestController
@Log4j2
public class UserLuaController {


    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private DefaultRedisScript<Long> defaultRedisScript;

    @PostMapping("/user/lua/update2")
    public R luaupdateUser2(Integer userid, String nickname) {
        String key = "user:" + userid;
        // 1: 第一次：飞先到缓存中根据key去查找一次，看是否存在
        String olduser = this.stringRedisTemplate.opsForValue().get(key);
        if (olduser == null) {
            // 2:第二次：发送第二次redis请求。不存在就新增
            this.stringRedisTemplate.opsForValue().set(key, nickname);
            return R.ok();
        }

        if (nickname.equals(olduser)) {
            log.info("用户对象:{}，无须修改!", key);
        } else {
            log.info("用户对象:{}，修改成功！!", key);
            // 2:第二次：发送第二次redis请求。不存在就新增
            this.stringRedisTemplate.opsForValue().set(key, nickname);
        }
        return R.ok();
    }

    @PostMapping("/user/lua/update")
    public R luaupdateUser(Integer userid, String nickname) {
        String key = "user:" + userid;
        // 1: 设置lua的key
        List<String> keysList = Arrays.asList(key);
        // 2 : execute 参数1：执行的lua脚本的对象  参数2：参数的key列表 参数3：执行lua每个key对应的参数
        Long execute = this.stringRedisTemplate.execute(defaultRedisScript, keysList, nickname);
        return R.ok().data("result", execute);
    }
}
